from app import db
from app.models.rol import Rol

association_table = db.Table('usuario_rol', db.Model.metadata,
    db.Column('usuario_id', db.Integer, db.ForeignKey('usuario.id')),
    db.Column('rol_id', db.Integer, db.ForeignKey('rol.id'))
)



class Usuario(db.Model):
    """
    Esta clase representa la tabla de usuarios de la base de datos
    """    
    __tablename__ = 'usuario'
    id = db.Column(db.Integer, primary_key=True)
    nombre = db.Column(db.String(50), unique=True)
    email = db.Column(db.String(50))
    contrasenha = db.Column(db.String(120))
    pregunta = db.Column(db.String(80))
    respuesta = db.Column(db.String(80))
    estado = db.Column(db.String(12))
    roles =  db.relationship(Rol,
                    secondary=association_table,
                    backref="usuario")
    

    def __init__(self, nombre=None, email=None, contrasenha=None, pregunta=None, respuesta=None, estado=None, roles=None):
        """
        Este metodo se utiliza para construir un registro de usuario
        """
        
        self.nombre = nombre
        self.email = email
        self.contrasenha = contrasenha
        self.pregunta = pregunta
        self.respuesta = respuesta
        self.estado = estado
        self.roles = roles
        
    def setContrasenha(self, contrasenha):
        """
        Este metodo se utiliza para establecer la contrasenha de un usuario
        """
        
        self.contrasenha = contrasenha
      
        
    def setEstado(self, estado):
        """
        Este metodo se utiliza para establecer el estado de un usuario
        """
        self.estado = estado
        
        
    def setNombre(self, nombre):
        """
        Este metodo se utiliza para establecer el nombre de un usuario
        """
        self.nombre = nombre
        
    
    def setEmail(self, email):
        """
        Este metodo se utiliza para establecer el email de un usuario
        """
        self.email = email
        
    
    def setPregunta(self, pregunta):
        """
        Este metodo se utiliza para establecer la pregunta secreta de un usuario
        """
        self.pregunta = pregunta
        
        
    def setRespuesta(self, respuesta):
        """
        Este metodo se utiliza para establecer la respuesta de un usuario
        """
        self.respuesta = respuesta
        
    
    def setRoles(self, roles):
        """
        Este metodo se utiliza para establecer los roles de un usuario
        """
        self.roles = roles
